package lp2.projeto;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;

/**
 * classe que implementa a leitura e escrita de arquivos de texto
 * 
 */

public class Arquivo {

	private List<String[]> linhas;
	private String localArquivo;

	/**
	 * construtor: abre o arquivo le suas informa��es e depois o fecha
	 * 
	 * @param nomeArquivo
	 *            nome do arquivo a ser usado
	 * @throws FileNotFoundException 
	 */

	public Arquivo(String localArquivo) throws FileNotFoundException {
		linhas = new ArrayList<String[]>();
		this.localArquivo = localArquivo;

		atualizaLinhas();
	}

	public List<String[]> getArquivo() {
		return linhas;
	}

	public void setArquivo(List<String> linha) throws IOException {
		
		String informacao = "";
		for (int i = 0; i < linha.size(); i++) {
			informacao += linha.get(i);
			if (i < (linha.size() - 1)) {
				informacao += ";";
			}

		}
		informacao += "\n";
		
		BufferedWriter saida = null;
		saida = new BufferedWriter(new FileWriter(localArquivo,true));
		saida.write(informacao);
		saida.close();
		
		atualizaLinhas();
	}

	private void atualizaLinhas() throws FileNotFoundException {
		
			File arquivo = new File(localArquivo);
			Scanner sc = new Scanner(arquivo);
			while (sc.hasNextLine()) {
				linhas.add(sc.nextLine().split(";"));
			}
			sc.close();

	}

	public String toString() {
		return linhas.toString();

	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((linhas == null) ? 0 : linhas.hashCode());
		result = prime * result
				+ ((localArquivo == null) ? 0 : localArquivo.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Arquivo other = (Arquivo) obj;
		if (linhas == null) {
			if (other.linhas != null)
				return false;
		} else if (!linhas.equals(other.linhas))
			return false;
		if (localArquivo == null) {
			if (other.localArquivo != null)
				return false;
		} else if (!localArquivo.equals(other.localArquivo))
			return false;
		return true;
	}

}